//package com.example.online_exam_system.utils;
//
//import java.time.temporal.TemporalAccessor;
//import com.example.online_exam_system.utils.StringUtil;
//import com.example.online_exam_system.utils.TimeUtil;
//import java.util.*;
//
///**
// * Map的工具类，提供从Map获取数据方法
// *
// * @author Lin created on 2015-11-6
// */
//public class Maps {
//
//    /**
//     * 针对相同的数据put
//     *
//     * @author majh
//     * @date 2020/6/24
//     */
//    public static void putIfExists(Map<String, Object> src, Map<String, Object> dest, String key) {
//        if (Maps.isNotEmpty(src, key)) {
//            dest.put(key, Maps.getString(src, key));
//        }
//    }
//
//    public static void putSameKey(Map<String, Object> src, Map<String, Object> dest, String keys) {
//        putSameKey(src, dest, keys.split(","));
//    }

//    public static void putSameKey(Map<String, Object> src, Map<String, Object> dest, String[] keys) {
//        for (String key : keys) {
//            dest.put(key, Maps.getString(src, key));
//        }
//    }
//
//    public static <R> Map<String, Object> getCond(Map<String, R> inData, String preName) {
//        if (StringUtil.isBlank(preName)) {
//            preName = "cond_";
//        } else {
//            preName = preName + "_";
//        }
//        if (inData == null || inData.isEmpty()) {
//            return null;
//        }
//        String finalPre = preName;
//        Map<String, Object> result = new HashMap<>(8);
//        inData.forEach((key, value) -> {
//            if (key.startsWith(finalPre)) {
//                String newKey = key.substring(finalPre.length());
//                result.put(newKey, value);
//            }
//        });
//        return result;
//    }
//
//    /**
//     * 判断Map中是否包含某个key，且其值不为空
//     *
//     * @param map map对象
//     * @param key 需要检查的Key
//     * @return Map中是否包含此key
//     */
//    public static boolean isEmpty(Map<?, ?> map, Object key) {
//        if (map == null) {
//            return true;
//        }
//        if (!map.containsKey(key)) {
//            return true;
//        }
//        Object obj = map.get(key);
//        if (obj == null) {
//            return true;
//        }
//        if (obj instanceof String) {
//            return StringUtil.isBlank((String) obj);
//        }
//        return false;
//    }
//
//    public static boolean isNotEmpty(Map<?, ?> map, Object key) {
//        return !isEmpty(map, key);
//    }
//
//
//    /**
//     * 从Map中获取某个Key对应的对象，若为空则返回默认值
//     *
//     * @param map      Map对象
//     * @param key      查询的Key
//     * @param defValue 为空时的默认值
//     * @return Map中对应key的Value值
//     */
//    public static Object get(Map<?, ?> map, Object key, Object defValue) {
//        if (map == null) {
//            return defValue;
//        }
//        Object obj = map.get(key);
//
//        if (obj == null) {
//            return defValue;
//        }
//
//        return obj;
//    }
//
//    public static <K,V> boolean isEmptyMap(Map<K,V> map) {
//        return map == null || map.isEmpty();
//    }
//
//    public static <K,V> boolean isNotEmptyMap(Map<K,V> map) {
//        return !isEmptyMap(map);
//    }
//
//    /**
//     * 从Map中获取Key对应的字符串，若Map中没有该键值或值为null或为"",则抛出异常
//     *
//     * @param map Map对象
//     * @param key 获取值的Key
//     * @return Map中key对应的Value值
//     */
//    public static String getStringEx(Map<?, ?> map, Object key) {
//        String v = getString(map, key);
//        if (v == null) {
//            throw new NullPointerException(v);
//        }
//        return v;
//    }
//
//    /**
//     * 从Map中获取Key对应的字符串，若Map中没有该键值则返回null
//     *
//     * @param map Map对象
//     * @param key 获取值的Key
//     * @return Map中key对应的Value的String格式
//     */
//    public static String getString(Map<?, ?> map, Object key) {
//        return getString(map, key, null);
//    }
//
//    /**
//     * 从Map中获取Key对应的字符串，若Map中没有该键值则返回传入的默认值
//     *
//     * @param map      Map对象
//     * @param key      获取值的Key
//     * @param defValue 没有值时返回的默认值
//     * @return Map中key对应的Value的String格式
//     */
//    public static String getString(Map<?, ?> map, Object key, String defValue) {
//        Object obj = get(map, key, defValue);
//        if (obj == null) {
//            return null;
//        }
//        return toString(obj);
//    }
//
//    private static String toString(Object obj) {
//        if (obj instanceof String) {
//            return (String) obj;
//        } else if (obj instanceof TemporalAccessor) {
//            return TimeUtil.format((TemporalAccessor) obj);
//        } else if (obj instanceof Date) {
//            return TimeUtil.format(TimeUtil.dateToLocalDateTime((Date) obj));
//        }
//
//        return obj.toString();
//    }
//
//    /**
//     * 从Map中获取Key对应的boolean，若Map中没有该键值则返回false
//     *
//     * @param map Map对象
//     * @param key 获取值的Key
//     * @return Map中key对应的Value的Boolean值
//     */
//    public static boolean getBoolean(Map<?, ?> map, Object key) {
//        return getBoolean(map, key, false);
//    }
//
//    /**
//     * 从Map中获取Key对应的Boolean，若Map中没有该键值则返回传入的默认值
//     *
//     * @param map      Map对象
//     * @param key      获取值的Key
//     * @param defValue 没有值时返回的默认值
//     * @return Map中key对应的Value的Boolean值
//     */
//    public static boolean getBoolean(Map<?, ?> map, Object key, boolean defValue) {
//        if (map == null) {
//            return defValue;
//        }
//        Object obj = map.get(key);
//        if (obj == null) {
//            return defValue;
//        }
//
//        if (obj instanceof Boolean) {
//            return (Boolean) obj;
//        }
//
//        return Boolean.parseBoolean(toString(obj));
//    }
//
//    /**
//     * 从Map中获取Key对应的Int，若Map中没有该键值则返回传入的默认值
//     *
//     * @param map      Map对象
//     * @param key      获取值的Key
//     * @param defValue 没有值时返回的默认值
//     * @return Map中key对应的Value的Int值
//     */
//    public static int getInt(Map<?, ?> map, Object key, int defValue) {
//        if (map == null) {
//            return defValue;
//        }
//        Object obj = map.get(key);
//        if (obj == null) {
//            return defValue;
//        }
//
//        if (obj instanceof Integer) {
//            return (Integer) obj;
//        }
//        String v = toString(obj);
//        if (StringUtil.isBlank(v)) {
//            return defValue;
//        }
//
//        return Integer.parseInt(v);
//    }
//
//    public static int getInt(Map<?, ?> map, Object key) {
//        return getInt(map,key,0);
//    }
//
//    /**
//     * 从Map中获取Key对应的字符串，若Map中没有该键值则抛出异常
//     *
//     * @param map Map对象
//     * @param key 获取值的Key
//     * @return Map中key对应的Value的Int值
//     */
//    public static int getIntEx(Map<?, ?> map, Object key) {
//        Object obj = map.get(key);
//        if (obj == null) {
//            throw new NullPointerException(key.toString());
//        }
//
//        if (obj instanceof Integer) {
//            return (Integer) obj;
//        }
//
//        String v = toString(obj);
//        if (StringUtil.isBlank(v)) {
//            throw new NullPointerException(key.toString());
//        }
//        return Integer.parseInt(v);
//    }
//
//    /**
//     * 从Map中获取Key对应的Long，若Map中没有该键值则返回传入的默认值
//     *
//     * @param map      Map对象
//     * @param key      获取值的Key
//     * @param defValue 没有值时返回的默认值
//     * @return Map中key对应的Value的Long值
//     */
//    public static long getLong(Map<?, ?> map, Object key, long defValue) {
//        if (map == null) {
//            return defValue;
//        }
//        Object obj = map.get(key);
//        if (obj == null) {
//            return defValue;
//        }
//
//        if (obj instanceof Long) {
//            return (Long) obj;
//        }
//        if (obj instanceof Integer) {
//            return (Integer) obj;
//        }
//        String v = toString(obj);
//        if (StringUtil.isBlank(v)) {
//            return defValue;
//        }
//        return Long.parseLong(v);
//    }
//
//    public static long getLong(Map<?, ?> map, Object key) {
//        return getLong(map,key,0L);
//    }
//
//    /**
//     * 从Map中获取Key对应的字符串，若Map中没有该键值则抛出异常
//     *
//     * @param map Map对象
//     * @param key 获取值的Key
//     * @return Map中key对应的Value的Long值
//     */
//    public static long getLongEx(Map<?, ?> map, Object key) {
//        Object obj = map.get(key);
//        if (obj == null) {
//            throw new NullPointerException(key.toString());
//        }
//
//        if (obj instanceof Long) {
//            return (Long) obj;
//        }
//        if (obj instanceof Integer) {
//            return (Integer) obj;
//        }
//        String v = toString(obj);
//        if (StringUtil.isBlank(v)) {
//            throw new NullPointerException(key.toString());
//        }
//        return Long.parseLong(v);
//    }
//
//    /**
//     * 从Map中获取Key对应的List对象，若Map中没有该键值则返回空指针
//     *
//     * @param map Map对象
//     * @param key 获取值的Key
//     * @return Map中key对应的Value的List对象
//     */
//    public static <T> List<T> getList(Map<?, ?> map, Object key) {
//        return getList(map, key, null);
//    }
//
//    /**
//     * 从Map中获取Key对应的List对象，若Map中没有该键值则返回传入的默认值
//     *
//     * @param map      Map对象
//     * @param key      获取值的Key
//     * @param defValue 没有值时返回的默认值
//     * @return Map中key对应的Value的List对象
//     */
//    @SuppressWarnings("unchecked")
//    public static <T> List<T> getList(Map<?, ?> map, Object key, List<T> defValue) {
//        if (map == null) {
//            return defValue;
//        }
//        Object obj = map.get(key);
//        if (obj == null) {
//            return defValue;
//        }
//
//        if (obj instanceof List) {
//            return ((List<T>) obj);
//        }
//        return null;
//    }
//
//    /**
//     * 从Map中获取Key对应的Map对象，若Map中没有该键值则返回空指针
//     *
//     * @param map Map对象
//     * @param key 获取值的Key
//     * @return Map中key对应的Value的Map对象
//     */
//    public static <K, V> Map<K, V> getMap(Map<?, ?> map, Object key) {
//        return getMap(map, key, null);
//    }
//
//    /**
//     * 从Map中获取Key对应的Map对象，若Map中没有该键值则返回传入的默认值
//     *
//     * @param map      Map对象
//     * @param key      获取值的Key
//     * @param defValue 没有值时返回的默认值
//     * @return Map中key对应的Value的Map对象
//     */
//    @SuppressWarnings("unchecked")
//    public static <K, V> Map<K, V> getMap(Map<?, ?> map, Object key, Map<K, V> defValue) {
//        if (map == null) {
//            return defValue;
//        }
//        Object obj = map.get(key);
//        if (obj == null) {
//            return defValue;
//        }
//
//        if (obj instanceof Map) {
//            return ((Map<K, V>) obj);
//        }
//        return null;
//    }
//
//    public static void addAllToItem(Map<String, List<Object>> map, String key, List<?> value) {
//        List<Object> list = map.computeIfAbsent(key, k -> new ArrayList<>());
//        list.addAll(value);
//    }
//
//    public static void addToItem(Map<String, List<Object>> map, String key, Object value) {
//        List<Object> list = map.computeIfAbsent(key, k -> new ArrayList<>());
//        list.add(value);
//    }
//
//
//}
